// 扩展基本功能行为

/**
 * @param target 类的原型
 * @param propertyName 字符串方法名
 * @param descriptor 属性描述其 descriptor.value就是方法
 * */
function logBeforeAndAfter(target,propertyName,descriptor){
    const originalMethod = descriptor.value;
    descriptor.value = function (...args){
        console.log('before executing',propertyName);       ////其他一些逻辑
        const result = originalMethod.apply(this, args);
        console.log('after executing',propertyName);        //其他一些逻辑
        return result;
    }
}

class Example{
    @logBeforeAndAfter
    someMethod(){
        console.log('run someMethod');
    }
}

const example = new Example();
example.someMethod();
